Imports FairShop.Operaties

''' <summary>
''' </summary>
''' <remarks>  BELANGRIJK: We werken voor de leveringdetails niet met een LeveringDetails-datatable, 
'''            maar met een Artikels-datatable.
'''            De reden is dat we hier soms nieuwe artikels toevoegen
'''            en ook dat we soms de prijs van een artikel aanpassen.
'''            We gebruiken de kolom "Voorraad" als een substituut voor "Geleverd"
'''            Het nadeel is dat we achteraf een conversie moeten doen om het toe te voegen
'''            aan de LeveringDetails.
''' </remarks>
Public Class LeveringDetailsForm

    Private Enum Modus
        NieuweLevering
        BestaandeLevering
    End Enum

    Private _modus As Modus
    Private _myLeveringRij As ArtikelsDataSet.LeveringenRow
    Private _kolomGeleverdIndex As Integer

#Region "Public property's"

    Public ReadOnly Property IdLevering() As Integer
        Get
            If (_myLeveringRij Is Nothing _
                OrElse _myLeveringRij.RowState = DataRowState.Deleted _
                OrElse _myLeveringRij.RowState = DataRowState.Detached) Then
                ' detached kan gebeuren als je een nieuwe levering begint, dan een detail toevoegt, en dan sluit zonder te bewaren.
                Return 0
            End If
            Return _myLeveringRij.Id
        End Get
    End Property

    Private _kanWijzigen As Boolean
    Public Property KanWijzigen() As Boolean
        Get
            Return _kanWijzigen
        End Get
        Set(ByVal value As Boolean)
            _kanWijzigen = value
            tsbWijzigen.Enabled = value
        End Set
    End Property

    Private _kanVerwijderen As Boolean
    Public Property KanVerwijderen() As Boolean
        Get
            Return _kanVerwijderen
        End Get
        Set(ByVal value As Boolean)
            _kanVerwijderen = value
            tsbVerwijderen.Enabled = value
            BindingNavigatorDeleteItem.Enabled = value
        End Set
    End Property

    Private _kanBewaren As Boolean
    Public Property KanBewaren() As Boolean
        Get
            Return _kanBewaren
        End Get
        Set(ByVal value As Boolean)
            _kanBewaren = value
            tsbBewaren.Enabled = value
        End Set
    End Property

#End Region

#Region "Constructors"

    ''' <summary>
    ''' Constructor voor aanmaken nieuwe levering
    ''' </summary>
    Public Sub New()
        ' This call is required by the Windows Form Designer.  
        InitializeComponent()

        Dim ds As New ArtikelsDataSet()
        InitForm(ds)

        Dim defaultLeverancier As ArtikelsDataSet.LeveranciersRow = Utility.Data.Leveranciers.FindById(Constants.DEFAULT_LEVERANCIER_ID)
        _myLeveringRij = Utility.Data.Leveringen.AddLeveringenRow(DateTime.Today(), defaultLeverancier, "")
        Dim position As Integer = Utility.Data.Leveringen.Rows.IndexOf(_myLeveringRij)
        Me.LeveringenBindingSource.Position = position

        _modus = Modus.NieuweLevering
        Me.Text = "Levering toevoegen"
    End Sub

    ''' <summary>
    ''' Constructor voor het bijwerken van een bestaande levering
    ''' </summary>
    ''' <param name="idLevering"></param>
    Public Sub New(ByVal idLevering As Integer)
        ' This call is required by the Windows Form Designer.  
        InitializeComponent()

        Dim ds As New ArtikelsDataSet()
        Dal.LeveringOphalen(ds.Artikels, idLevering)

        InitForm(ds)

        _myLeveringRij = Utility.Data.Leveringen.FindById(idLevering)
        Dim position As Integer = Utility.Data.Leveringen.Rows.IndexOf(_myLeveringRij)
        Me.LeveringenBindingSource.Position = position

        _modus = Modus.BestaandeLevering
        Me.Text = "Levering wijzigen"
    End Sub

    Private Sub InitForm(ByVal ds As ArtikelsDataSet)
        ' We will specify the DataSet from the DataGrid form here  
        Me.ArtikelsDataSet1 = ds
        Me.LeveringenBindingSource.DataSource = Utility.Data
        Me.LeveranciersBindingSource.DataSource = Utility.Data
        ' BELANGRIJK: We werken niet met een LeveringDetails-datatable, maar met een Artikels-datatable.
        '             De reden is dat we hier soms nieuwe artikels toevoegen
        '             en ook dat we soms de prijs van een artikel aanpassen.
        '             We gebruiken de kolom "Voorraad" als een substituut voor "Geleverd"
        '             Het nadeel is dat we achteraf een conversie moeten doen om het toe te voegen
        '             aan de LeveringDetails.
        Me.ArtikelsBindingSource.DataSource = Me.ArtikelsDataSet1

        Me.BindingNavigatorAddNewItem.Visible = False
        Me.BindingNavigator1.AddNewItem = Nothing
        Me.BindingNavigator1.DeleteItem = Nothing
    End Sub

    Protected Overrides Sub OnLoad(ByVal e As EventArgs)
        MyBase.OnLoad(e)
        Try
            InitGrid()
            KanBewaren = False
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het inladen van de gegevens")
            log.WriteError("LeveringDetailsForm.Load", ex)
        End Try
    End Sub

#End Region

#Region "Event handling"

    Private Sub tsbAfsluiten_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbAfsluiten.Click
        Me.Close()
    End Sub

    Protected Overrides Sub OnKeyUp(ByVal e As KeyEventArgs)
        MyBase.OnKeyUp(e)
        Select Case e.KeyCode
            Case Keys.F12
                Me.Close()
            Case Keys.F2
                If (Not KanBewaren) Then Return
                BewaarWijzigingen()
            Case Keys.F3
                If (Not KanVerwijderen) Then Return
                Verwijderen()
            Case Keys.F4
                NieuweBarcode()
            Case Keys.F5
                If (Not KanWijzigen) Then Return
                If (Grid1.SelectedRows.Count > 0) Then
                    BeheerArtikel(Grid1.SelectedRows(0).Index)
                End If
        End Select
    End Sub

    Private Sub InvoerArtikelsControl1_BarcodeConfirmed(ByVal sender As Object, ByVal e As InvoerArtikelsControl.BarcodeConfirmedEventArgs) _
            Handles InvoerArtikelsControl1.BarcodeConfirmed
        Try
            Dim eersteArtikelMetDezeBarcode As ArtikelsDataSet.ArtikelsRow = ArtikelsBL.GetEersteVerkoopbaarArtikelMetBarcode(InvoerArtikelsControl1.Barcode)

            If (eersteArtikelMetDezeBarcode Is Nothing) Then
                ' barcode niet gevonden in databank
                e.BarcodeStatus = VoegLeveringsDetailMetNieuweBarcodeToe(InvoerArtikelsControl1.Aantal)
            Else
                ' barcode gevonden in de databank
                Dim artikels As List(Of ArtikelSamenstelling.Artikel) = Utility.ArtikelSamenstelling.GetArtikels(eersteArtikelMetDezeBarcode)
                For Each artikel As ArtikelSamenstelling.Artikel In artikels
                    Dim aantal As Integer = InvoerArtikelsControl1.Aantal * artikel.Aantal
                    e.BarcodeStatus = VoegLeveringsDetailMetBestaandeBarcodeToe(artikel.ArtikelRij, aantal)
                Next
            End If
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het inladen van de gegevens")
            log.WriteError("LeveringDetailsForm.InvoerArtikelsControl1_BarcodeConfirmed", ex)
            e.BarcodeStatus = InvoerArtikelsControl.BarcodeStatusType.Invalid
        End Try
    End Sub

    Private Sub tsbBewaren_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbBewaren.Click
        BewaarWijzigingen()
    End Sub

    Private Sub Grid1_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) Handles Grid1.SelectionChanged
        If (Grid1.SelectedRows.Count = 0) Then
            lblReedsGeteldAantal.Text = ""
            KanVerwijderen = False
            KanWijzigen = False
            Me.BindingNavigatorDeleteItem.Enabled = False
            Return
        Else
            KanVerwijderen = True
            KanWijzigen = True
            Dim row As DataGridViewRow = Grid1.SelectedRows(0)
            Try
                Me.BindingNavigatorDeleteItem.Enabled = True
                lblReedsGeteldAantal.Text = DataGridViewHelper.GetValueFromDataGridRow( _
                    Me.ArtikelsDataSet1.Artikels.VoorraadColumn.ColumnName, row).ToString()
            Catch ex As Exception
                ' soms schijnt de rij geen "Voorraad"-item te hebben en dan kom je hier
                row.ErrorText = ex.Message
                log.WriteError("LeveringDetailsForm.Grid1_SelectionChanged", ex)
            End Try
        End If
    End Sub

    Protected Overrides Sub OnFormClosing(ByVal e As FormClosingEventArgs)
        MyBase.OnFormClosing(e)
        Me.LeveringenBindingSource.EndEdit()
        If (Me.ArtikelsDataSet1.HasChanges()) Then
            Dim result As DialogResult = MessageBox.Show("Deze levering bevat wijzigingen. Wil je de wijzigingen bewaren?", "Bewaren", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation)
            Select Case result
                Case Windows.Forms.DialogResult.Yes
                    BewaarWijzigingen()
                Case Windows.Forms.DialogResult.Cancel
                    e.Cancel = True
                    Return
                Case Windows.Forms.DialogResult.No
                    ' annuleer de wijzigingen en laat sluiten
                    ' TODO: wat als de artikels al bewaard zijn? -> Delete nodig.
                    Me.LeveringenBindingSource.CancelEdit()
                    If (_modus = Modus.NieuweLevering) Then
                        ' zorg ervoor dat het nieuw aangemaakte record verdwijnt
                        ' doe dit alleen voor nieuwe records, anders worden de wijzigingen die tevoren 
                        ' gedaan werden in de DataSet-rij ook ongedaan gemaakt
                        _myLeveringRij.RejectChanges()
                    End If
            End Select
        End If
        ' maak de artikeltabel leeg, anders komen dezelfde rijen terug als je een volgende levering zou aanmaken
        Me.ArtikelsDataSet1.Artikels.Clear()
    End Sub

    Private Sub Grid1_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles Grid1.DataError
        MsgBox.ShowError("Ongeldige invoer. Bij een wijziging, druk Esc om de vorige waarde te herstellen")
        log.WriteError("LeveringDetailsForm.Grid1_DataError", e.Exception)
        e.Cancel = True
    End Sub

    Private Sub Grid1_CellDoubleClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles Grid1.CellDoubleClick
        BeheerArtikel(e.RowIndex)
    End Sub

    Private Sub tsbVerwijderen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbVerwijderen.Click
        Verwijderen()
    End Sub

    Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BindingNavigatorDeleteItem.Click
        Verwijderen()
    End Sub

    Private Sub Grid1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles Grid1.CellFormatting
        Dim row As DataGridViewRow = Grid1.Rows(e.RowIndex)
        If (row.DataBoundItem Is Nothing) Then Return
        Dim drv As DataRowView = DirectCast(row.DataBoundItem, DataRowView)
        Dim leveringDetailsRow As ArtikelsDataSet.ArtikelsRow = DirectCast(drv.Row, ArtikelsDataSet.ArtikelsRow)

        If (IsRijNogTeBewaren(leveringDetailsRow)) Then
            If (e.ColumnIndex = _kolomGeleverdIndex AndAlso Convert.ToInt32(e.Value) = 0) Then
                ' aantal 0 mag alleen tijdelijk, en moet dus goed opvallen
                ' haalt niks uit want deze rij heeft altijd de selectiekleur
                e.CellStyle.BackColor = Constants.Kleuren.ONGELDIG
                'row.Cells(e.ColumnIndex).ErrorText = "Waarde nul is niet toegelaten"
            Else
                e.CellStyle.BackColor = Constants.Kleuren.HUIDIG
                'row.Cells(e.ColumnIndex).ErrorText = String.Empty
            End If
        Else
            e.CellStyle.BackColor = Constants.Kleuren.NEUTRAAL
        End If
    End Sub

    Private Sub tsbNieuweBarcode_Click(ByVal sender As Object, ByVal e As EventArgs) Handles tsbNieuweBarcode.Click
        NieuweBarcode()
    End Sub

    Private Sub tsbWijzigen_ButtonClick(ByVal sender As Object, ByVal e As EventArgs) Handles tsbWijzigen.ButtonClick
        If (Grid1.SelectedRows.Count > 0) Then
            BeheerArtikel(Grid1.SelectedRows(0).Index)
        End If
    End Sub

    Private Sub tbDatum_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles tbDatum.TextChanged
        KanBewaren = True
    End Sub

    Private Sub cbLeverancier_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cbLeverancier.SelectedIndexChanged
        KanBewaren = True
    End Sub

    Private Sub tbFactuurnummer_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles tbFactuurnummer.TextChanged
        KanBewaren = True
    End Sub

#End Region

#Region "Helperfuncties"

    Private Sub InitGrid()
        With Grid1
            .ReadOnly = True
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.IdColumn.ColumnName, Grid1)
                .Visible = False ' Autonumber niet tonen
            End With
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.OmschrijvingColumn.ColumnName, Grid1)
                .Width = 250
            End With
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.BarcodeColumn.ColumnName, Grid1)
                .Width = 150
            End With
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.VoorraadColumn.ColumnName, Grid1)
                .HeaderText = "Geleverd"
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                _kolomGeleverdIndex = .Index
            End With
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.PrijsColumn.ColumnName, Grid1)
                .HeaderText = "Prijs"
                .Width = 90
                .DefaultCellStyle.Format = "c"
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.InkoopprijsColumn.ColumnName, Grid1)
                .HeaderText = "Inkoopprijs"
                .Width = 90
                .DefaultCellStyle.Format = "c"
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
            With DataGridViewHelper.GetGridColumnByDataName(ArtikelsDataSet1.Artikels.StatiegeldEuroColumn.ColumnName, Grid1)
                .HeaderText = "Statiegeld"
                .Width = 90
                .DefaultCellStyle.Format = "c"
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
        End With
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="aantal"></param>
    ''' <returns></returns>
    Private Function VoegLeveringsDetailMetNieuweBarcodeToe(ByVal aantal As Integer) _
            As InvoerArtikelsControl.BarcodeStatusType
        ' zoek in de grid
        For Each bestaandeRij As ArtikelsDataSet.ArtikelsRow In ArtikelsDataSet1.Artikels
            ' TODO: veronderstelt dat er geen dubbele barcodes in de tabel zitten!
            If (bestaandeRij.Barcode = InvoerArtikelsControl1.Barcode) Then
                ' barcode staat al in de grid (nog niet in databank), toon barcode in speciale kleur om op te vallen
                ArtikelsBindingSource.Position = ArtikelsBindingSource.Find("ID", bestaandeRij.Id)

                bestaandeRij.Voorraad += aantal
                'Me.lblReedsGeteldAantal.Text = ""
                Me.lblReedsGeteldAantal.Text = bestaandeRij.Voorraad.ToString()
                Me.KanBewaren = True

                Sound.PlayWarning() ' verwittig de gebruiker dat de barcode al in de lijst staat
                Return InvoerArtikelsControl.BarcodeStatusType.Speciaal
            End If
        Next
        Sound.PlayError() ' nieuw artikel is niet echt een error, maar verwittig de gebruiker dat de barcode niet gevonden is

        ' laat nieuw artikel toevoegen door gebruiker
        Dim insertForm As New BeheerArtikelForm(Me.InvoerArtikelsControl1.Barcode, aantal, Me.ArtikelsDataSet1)
        If (insertForm.ShowDialog = DialogResult.OK) Then
            ' lijst wordt automatisch bijgewerkt

            Dim toegevoegdArtikelRow As ArtikelsDataSet.ArtikelsRow = Me.ArtikelsDataSet1.Artikels.FindById(insertForm.ArtikelId)
            Dim laatstToegevoegdArtikelId As Integer = insertForm.ArtikelId
            aantal = insertForm.Aantal

            If (insertForm.ArtikelSoort = BeheerArtikelForm.ArtikelSoortType.Doos) Then
                Utility.ArtikelSamenstelling.AddHoofdArtikelId(insertForm.ArtikelId) ' lokale kopie van samengestelde artikels updaten
                ' vervang de doos door de artikelen die erin zitten
                Dim artikels As List(Of ArtikelSamenstelling.Artikel) = Utility.ArtikelSamenstelling.GetArtikels(toegevoegdArtikelRow)
                Debug.Assert(artikels.Count = 1, "Een toegevoegde doos kan nooit meerdere samenstellingen hebben")

                Dim deelArtikel As ArtikelSamenstelling.Artikel = artikels(0)
                Debug.Assert(deelArtikel.Aantal > 1, "Een doos moet meerdere artikels bevatten")

                aantal = aantal * deelArtikel.Aantal
                VoegLeveringsDetailMetBestaandeBarcodeToe(deelArtikel.ArtikelRij, aantal)
                laatstToegevoegdArtikelId = deelArtikel.ArtikelRij.Id

                Me.ArtikelsDataSet1.Artikels.RemoveArtikelsRow(toegevoegdArtikelRow) ' verwijder de doos zelf uit de dataset (en uit de grid)
            End If

            ArtikelsBindingSource.Position = ArtikelsBindingSource.Find("ID", laatstToegevoegdArtikelId)
            lblReedsGeteldAantal.Text = aantal.ToString()
            Me.KanBewaren = True
            Return InvoerArtikelsControl.BarcodeStatusType.Valid
        Else
            ' barcode ook na mogelijkheid tot toevoegen niet gevonden
            lblReedsGeteldAantal.Text = "0"
            Return InvoerArtikelsControl.BarcodeStatusType.Invalid
        End If
    End Function

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="artikelRij">Artikelrij. 
    ''' Let op: deze komt niet uit ArtikelsDataSet1, maar uit Utility.Data met het artikel 
    ''' met de huidige barcode</param>
    ''' <param name="aantal"></param>
    Private Function VoegLeveringsDetailMetBestaandeBarcodeToe(ByVal artikelRij As ArtikelsDataSet.ArtikelsRow, ByVal aantal As Integer) _
            As InvoerArtikelsControl.BarcodeStatusType
        ' barcode gevonden in de databank
        Dim idVanHuidigeBarcodeInDatabank As Integer = artikelRij.Id
        Dim bestaandeRij As ArtikelsDataSet.ArtikelsRow = Me.ArtikelsDataSet1.Artikels.FindById(idVanHuidigeBarcodeInDatabank)
        If (bestaandeRij IsNot Nothing) Then
            ' barcode staat al in de grid, selecteer de gegevens
            ArtikelsBindingSource.Position = ArtikelsBindingSource.Find("ID", idVanHuidigeBarcodeInDatabank)

            bestaandeRij.Voorraad += aantal
            'Me.lblReedsGeteldAantal.Text = ""
            Me.lblReedsGeteldAantal.Text = bestaandeRij.Voorraad.ToString()
            Me.KanBewaren = True

            Sound.PlayWarning() ' verwittig de gebruiker dat de barcode al in de lijst staat
            ' toon de barcode in een speciale kleur om op te vallen
            Return InvoerArtikelsControl.BarcodeStatusType.Speciaal
        Else
            ' barcode staat nog niet in de grid
            ' toon het aantal toegevoegd, niet de huidige voorraad
            artikelRij.Voorraad = aantal
            Me.lblReedsGeteldAantal.Text = aantal.ToString()
            'Me.ArtikelsDataSet1.Artikels.ImportRow(artikelRij)
            Me.ArtikelsDataSet1.Artikels.Rows.Add(artikelRij.ItemArray)
            artikelRij.RejectChanges()
            ArtikelsBindingSource.Position = ArtikelsBindingSource.Find("ID", idVanHuidigeBarcodeInDatabank)

            'Me.lblReedsGeteldAantal.Text = ""
            Me.KanBewaren = True

            Sound.PlayOK()
            Return InvoerArtikelsControl.BarcodeStatusType.Valid
        End If
    End Function

    Private Sub BewaarWijzigingen()
        Try
            Cursor = Cursors.WaitCursor
            If (Not ValidateChildren()) Then Return
            If (IdLevering <= 0) Then
                ' levering zelf werd nog niet toegevoegd, doe dat eerst
                Dal.LeveringToevoegen(_myLeveringRij)
            End If
            ' bewaar de details en pas de voorraad aan in de Artikels-tabel
            LeveringenBindingSource.EndEdit()
            Dal.LeveringBewaren(_myLeveringRij, Me.ArtikelsDataSet1.Artikels)
            Me.InvoerArtikelsControl1.Clear()
            Me.KanBewaren = False
        Catch ex As Exception
            MsgBox.ShowError("Fout tijdens het bewaren")
            log.WriteError("LeveringDetailsForm.BewaarWijzigingen", ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub Verwijderen()
        Try
            Cursor = Cursors.WaitCursor
            'If (Me.ArtikelsDataSetBindingSource.Current IsNot Nothing) Then
            'Me.ArtikelsDataSetBindingSource.RemoveCurrent()
            'End If
            For i As Integer = Grid1.SelectedRows.Count - 1 To 0 Step -1
                Dim selectedRow As DataGridViewRow = Grid1.SelectedRows(i)
                Dim artikelId As Integer = Convert.ToInt32(DataGridViewHelper.GetValueFromDataGridRow("ID", selectedRow))
                Dim artikelRow As ArtikelsDataSet.ArtikelsRow = Me.ArtikelsDataSet1.Artikels.FindById(artikelId)
                Dim originalState As DataRowState = artikelRow.RowState
                Grid1.Rows.Remove(selectedRow)
                If (Not originalState = DataRowState.Added) Then
                    ' Dit artikel bestond al. Verwijder de rij in de grid, maar
                    ' ook in de dataset (in plaats van een rij met RowState=Deleted te laten), 
                    ' zodat er niets in de databank gewijzigd wordt
                    Me.ArtikelsDataSet1.Artikels.RemoveArtikelsRow(artikelRow)
                End If
            Next
            KanBewaren = True
        Catch ex As Exception
            log.WriteError("LeveringDetailsForm.Verwijderen", ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub BeheerArtikel(ByVal rowIndex As Integer)
        Try
            Cursor = Cursors.WaitCursor
            Dim artikelsRow As ArtikelsDataSet.ArtikelsRow = Utility.GetGridDataRow(Of ArtikelsDataSet.ArtikelsRow)(Grid1, rowIndex)

            If (artikelsRow Is Nothing) Then Return ' bv. bij dubbelklikken op lege rij onderaan

            Dim editForm As New BeheerArtikelForm(artikelsRow.Id, Me.ArtikelsDataSet1)
            If (editForm.ShowDialog = DialogResult.OK) Then
                ' update grid gaat vanzelf
                lblReedsGeteldAantal.Text = editForm.Aantal.ToString()
                Me.KanBewaren = True
                Me.InvoerArtikelsControl1.Clear()
            End If
        Catch ex As Exception
            log.WriteError("LeveringDetailsForm.BeheerArtikel", ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Function IsRijNogTeBewaren(ByVal row As ArtikelsDataSet.ArtikelsRow) As Boolean
        Return (row.RowState = DataRowState.Modified)
    End Function

    Private Sub NieuweBarcode()
        Dim f As New AanmaakBarcodesForm(True)
        If (f.ShowDialog() = Windows.Forms.DialogResult.OK) Then
            InvoerArtikelsControl1.Barcode = f.Barcode
            InvoerArtikelsControl1.BarcodeBevestigd()
        End If
    End Sub

#End Region

End Class
